﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestClassesForConcepts.Sample3
{
    // ----------------- simple types

    public class KeyP { }

    public class KeyQ { }

    public class KeyS { }

    public class KeyS1 : KeyS { }

    // ----------------- generic chain

    public class SA { }

    public class SB : SA { }

    public class SC1<T> : SB { }

    public class SD1<S, T> : SC1<T> { }

    public class SE1<S, T> : SD1<S, T> { }

    public class SF1<S, T> : SE1<S, T> { }

    public class SG1<S> : SF1<S, KeyS> { }

    public class SC2<S, T> : SB { }

    public class SD2<S, T> : SC2<T, S> { }

    public class SE2<S> : SD2<KeyP, KeyQ> { }

    public class SF2 : SE2<KeyP> { }


}
